using System;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using MS.InformationManagement.DAL.DocumentCenter;
using System.Linq;

namespace MS.InformationManagement.Documents.ObjectDef.Features.Groups
{
    /// <summary>
    /// This class handles events raised during feature activation, deactivation, installation, uninstallation, and upgrade.
    /// </summary>
    /// <remarks>
    /// The GUID attached to this class may be used during packaging and should not be modified.
    /// </remarks>

    [Guid("6d6c61d3-cf61-4792-a178-9a864aed317a")]
    public class GroupsEventReceiver : SPFeatureReceiver
    {
        // Uncomment the method below to handle the event raised after a feature has been activated.

        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            SPWeb currentWeb = properties.Feature.Parent as SPWeb;
            setGroupRoles(currentWeb);
        }


        // Uncomment the method below to handle the event raised before a feature is deactivated.

        //public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        //{
        //}


        // Uncomment the method below to handle the event raised after a feature has been installed.

        //public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        //{
        //}


        // Uncomment the method below to handle the event raised before a feature is uninstalled.

        //public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        //{
        //}

        // Uncomment the method below to handle the event raised when a feature is upgrading.

        //public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)
        //{
        //}

        #region private methods

        private void setGroupRoles(SPWeb currentWeb)
        {
            using (var dc = new DCDocumentCenterDataContext(currentWeb.Url))
            {
                //Deliveries Group

                var deliveryRole = (from role in dc.Roles
                                    where role.Role == "ENVIO DOCUMENTOS"
                                    select role).FirstOrDefault();
                var deliveryGroup = currentWeb.Groups["Envios Correo"];
                deliveryRole.Grupo = deliveryGroup.Name;
                deliveryRole.GrupoId = deliveryGroup.ID;

                var contacRole = (from role in dc.Roles
                                  where role.Role == "CONTACTOS"
                                  select role).FirstOrDefault();
                var contacRoleGroup = currentWeb.Groups["Crear Contactos"];
                contacRole.Grupo = contacRoleGroup.Name;
                contacRole.GrupoId = contacRoleGroup.ID;
                
                dc.SubmitChanges();
            }
        }

        #endregion

    }
}
